package newMenu;

import Config.*;

/**
 * En aquest manager es control·la quin es el perfil que hi ha actiu. També s'hi
 * guarden les dades referents a opcions de l'usuari o estadistiques.
 * @author David Alvarez Palau i Ernest Daban Macià
 */
public class ManagerPerfil {

    // Perfil del jugador que s'ha triat per jugar
    private static int perfilTriat;
    // Wave a partir de la qual el jugador començara a jugar
    private static int nivel;
    // Wave que s'esta jugant actualment
    private static int nivelActual;
    //Idioma elegido
    private static int idioma;
    // Volum de la música
    private static int volumMusica;
    // Volum dels efectes de so
    private static int volumEfectes = 20;
    // Total de temps que durara la wave
    private static int tempsTotal;
    // Unitats disponibles per triar en la wave actual
    private static String unitatsDisponibles;
    //Nivel de dificultad del perfil
    private static int level;
    // S'utilitza per guardar informació referent a la unitat triada quan es canvia d'estat
    private static String informacioUnitat;
    // Total d'enemics que han estat mortes per les unitats del jugador
    private static int navesDestruidas;
    // Total d'enemics que han estat mortes per les unitats del jugador del tipus 1
    private static int navesDestruidas1;
    // Total d'enemics que han estat mortes per les unitats del jugador del tipus 2
    private static int navesDestruidas2;
    // Total d'enemics que han estat mortes per les unitats del jugador del tipus 3
    private static int navesDestruidas3;
    // Total d'enemics que han estat mortes per les unitats del jugador del tipus 4
    private static int navesDestruidas4;
    // Total d'enemics que han estat mortes per les unitats del jugador del tipus 5
    private static int navesDestruidas5;
    // Total d'enemics que han estat mortes per les unitats del jugador del tipus 6
    private static int navesDestruidas6;
    // Total d'enemics que han estat mortes per les unitats del jugador
    private static int navesDestruidasTotal;
    // Total d'enemics que han estat mortes per les unitats del jugador del tipus 1
    private static int navesDestruidas1Total;
    // Total d'enemics que han estat mortes per les unitats del jugador del tipus 2
    private static int navesDestruidas2Total;
    // Total d'enemics que han estat mortes per les unitats del jugador del tipus 3
    private static int navesDestruidas3Total;
    // Total d'enemics que han estat mortes per les unitats del jugador del tipus 4
    private static int navesDestruidas4Total;
    // Total d'enemics que han estat mortes per les unitats del jugador del tipus 5
    private static int navesDestruidas5Total;
    // Total d'enemics que han estat mortes per les unitats del jugador del tipus 6
    private static int navesDestruidas6Total;
    // Dades del perfil triat
    private static ArchivoConfiguracion dadesPerfil;
    // Datos del nivel actual
    private static ArchivoConfiguracion dadesNivel;
    // Indica si el jugador ha conseguido super un nivel
    private static boolean canviNivel;
    // Vidas del perfil
    private static int vidas;
    // Vidas del puntuacio
    private static int puntuacio;
    // Muertes del usuario
    private static int muertes;
    // Tipo de nave
    private static int nave;
    //disparos acertados
    private static int disparosAcertados;
    //disparos realizados
    private static int disparosRealizados;
    //bombas disponibles
    private static int bombasDisponibles;

    /**
     * Inicialitza les variables i recursos necessaris per usar la classe
     * @param perfil
     */
    public static void init(int perfil) {
        // Es carrega l'arxiu pertinent
        perfilTriat = perfil;
        if (perfilTriat == 1) {
            dadesPerfil = Configuracion.getPerfil1();
        } else if (perfilTriat == 2) {
            dadesPerfil = Configuracion.getPerfil2();
        } else if (perfilTriat == 3) {
            dadesPerfil = Configuracion.getPerfil3();
        } else if (perfilTriat == 4) {
            dadesPerfil = Configuracion.getPerfil4();
        }
        // Es carreguen les dades del nivel que s'ha de jugar
        //dadesNivel = Configuracion.getNivel();
        nivel = dadesPerfil.getPropiedadInt("nivel");
        nivelActual = dadesPerfil.getPropiedadInt("nivel");
        volumMusica = dadesPerfil.getPropiedadInt("volumMusica");
        volumEfectes = dadesPerfil.getPropiedadInt("volumEfectes");
        idioma = dadesPerfil.getPropiedadInt("idioma");
        level = dadesPerfil.getPropiedadInt("level");
        vidas = dadesPerfil.getPropiedadInt("totalVidas");
        puntuacio = dadesPerfil.getPropiedadInt("puntuacio");
        muertes = dadesPerfil.getPropiedadInt("muertes");
        nave = dadesPerfil.getPropiedadInt("nave");
        bombasDisponibles = dadesPerfil.getPropiedadInt("bombas");
        navesDestruidasTotal = dadesPerfil.getPropiedadInt("navesDestruidas");
        navesDestruidas1Total = dadesPerfil.getPropiedadInt("navesDestruidas1");
        navesDestruidas2Total = dadesPerfil.getPropiedadInt("navesDestruidas2");
        navesDestruidas3Total = dadesPerfil.getPropiedadInt("navesDestruidas3");
        navesDestruidas4Total = dadesPerfil.getPropiedadInt("navesDestruidas4");
        navesDestruidas5Total = dadesPerfil.getPropiedadInt("navesDestruidas5");
        navesDestruidas6Total = dadesPerfil.getPropiedadInt("navesDestruidas6");
        // S'assignen les propietats pertinents
        //assignarPropietats();
        navesDestruidas = 0;
    }

    /**
     * Quan un jugador supera una wave s'escriuen les dades necessaries
     */
    /*public static void passaASeguentWave() {
        if (nivelActual==nivel) {
            nivel++;
            nivelActual++;
            dadesPerfil.setPropiedadInt("seguentWave", nivel);
            dadesPerfil.guardar();
            canviNivel = true;
        }
    }*/

    /**
     * Assigna les unitats disponibles que tindra el jugador per escollir en la pantalla seguent wave
     */
    /*public static void assignarPropietats() {
        //unitatsDisponibles = dadesNivel.getPropiedadString("unitatsDisponibles" + nivel);
        //tempsTotal = dadesNivel.getPropiedadInt("temps" + nivel);
        //enemicsTotals = dadesNivel.getPropiedadInt("numeroEnemigos" + nivel);
        //enemicsNivel = retornaEnemics();
    }*/

    /**
     * Retorna un string amb els enemics que apareixeran en la seguent wave a jugar
     * @return String amb informació dels enemics
     */
    /*private static String retornaEnemics() {
        String enemics = "";
        String[] unitatsEnemigues = dadesNivel.getPropiedadString("enemigosNivel" + nivel).split("-");
        for (String z : unitatsEnemigues) {
            enemics += z.split(":")[0] + "-";
        }
        return enemics.substring(0, enemics.length() - 1);
    }*/

    /**
     * Retorna les unitats disponibles en la seguent wave
     * @return unitats disponibles
     */
    public static String getUnitatsDisponibles() {
        if (canviNivel) {
            //assignarPropietats();
            canviNivel = false;
        }
        return unitatsDisponibles;
    }

    /**
     * Indica si es pot canviar la wave a jugar en l'estat seguent wave
     * @return
     */
    public static boolean potRestarWave() {
        if (nivel > 1) {
            return true;
        }
        return false;
    }

    /**
     * Es guarden les estadistiques del jugador en l'arxiu de text pertinent
     */
    public static void guardarEstadistiques() {
        int total = dadesPerfil.getPropiedadInt("navesDestruidas");
        total += navesDestruidas;
        dadesPerfil.setPropiedadInt("navesDestruidas", total);
        //
        total = dadesPerfil.getPropiedadInt("navesDestruidas1");
        total += navesDestruidas1;
        dadesPerfil.setPropiedadInt("navesDestruidas1", total);
        //
        total = dadesPerfil.getPropiedadInt("navesDestruidas2");
        total += navesDestruidas2;
        dadesPerfil.setPropiedadInt("navesDestruidas2", total);
        //
        total = dadesPerfil.getPropiedadInt("navesDestruidas3");
        total += navesDestruidas3;
        dadesPerfil.setPropiedadInt("navesDestruidas3", total);
        //
        total = dadesPerfil.getPropiedadInt("navesDestruidas4");
        total += navesDestruidas4;
        dadesPerfil.setPropiedadInt("navesDestruidas4", total);
        //
        total = dadesPerfil.getPropiedadInt("navesDestruidas5");
        total += navesDestruidas5;
        dadesPerfil.setPropiedadInt("navesDestruidas5", total);
        //
        total = dadesPerfil.getPropiedadInt("navesDestruidas6");
        total += navesDestruidas6;
        dadesPerfil.setPropiedadInt("navesDestruidas6", total);
        //
        total = dadesPerfil.getPropiedadInt("totalVidas");
        total += vidas;
        dadesPerfil.setPropiedadInt("totalVidas", total);
        //
        total = dadesPerfil.getPropiedadInt("puntuacio");
        total += puntuacio;
        dadesPerfil.setPropiedadInt("puntuacio", total);
        //
        total = dadesPerfil.getPropiedadInt("muertes");
        total += muertes;
        dadesPerfil.setPropiedadInt("muertes", total);
        //
        total = dadesPerfil.getPropiedadInt("nivel");
        total += nivel;
        dadesPerfil.setPropiedadInt("nivel", total);
        //
        total = dadesPerfil.getPropiedadInt("nave");
        total += nave;
        dadesPerfil.setPropiedadInt("nave", total);
        //
        total = dadesPerfil.getPropiedadInt("level");
        total += level;
        dadesPerfil.setPropiedadInt("level", total);
        //
        total = dadesPerfil.getPropiedadInt("disparosRealizados");
        total += disparosRealizados;
        dadesPerfil.setPropiedadInt("disparosRealizados", total);
        //
        total = dadesPerfil.getPropiedadInt("disparosAcertados");
        total += disparosAcertados;
        dadesPerfil.setPropiedadInt("disparosAcertados", total);
        dadesPerfil.guardar();
    }

    /**
     * Guarda els valors de volums en l'arxiu de text pertinent
     */
    public static void guardarValorsMusica() {
        dadesPerfil.setPropiedadInt("volumMusica", volumMusica);
        dadesPerfil.setPropiedadInt("volumEfectes", volumEfectes);
        dadesPerfil.guardar();
    }

    public static ArchivoConfiguracion getDadesNivel() {
        return dadesNivel;
    }

    public static ArchivoConfiguracion getDadesPerfil() {
        return dadesPerfil;
    }

    public static int getIdioma() {
        return idioma;
    }

    public static String getInformacioUnitat() {
        return informacioUnitat;
    }

    public static int getLevel() {
        return level;
    }

    public static int getMuertes() {
        return muertes;
    }

    public static int getNave() {
        return nave;
    }

    public static int getNavesDestruidas() {
        return navesDestruidas;
    }

    public static int getNavesDestruidas1() {
        return navesDestruidas1;
    }

    public static int getNavesDestruidas2() {
        return navesDestruidas2;
    }

    public static int getNavesDestruidas3() {
        return navesDestruidas3;
    }

    public static int getNavesDestruidas4() {
        return navesDestruidas4;
    }

    public static int getNavesDestruidas5() {
        return navesDestruidas5;
    }

    public static int getNavesDestruidas6() {
        return navesDestruidas6;
    }

    public static int getNivel() {
        return nivel;
    }

    public static int getNivelActual() {
        return nivelActual;
    }

    public static int getPerfilTriat() {
        return perfilTriat;
    }

    public static int getPuntuacio() {
        return puntuacio;
    }

    public static int getTempsTotal() {
        return tempsTotal;
    }

    public static int getVidas() {
        return vidas;
    }

    public static int getVolumEfectes() {
        return volumEfectes;
    }

    public static int getVolumMusica() {
        return volumMusica;
    }

    public static int getDisparosAcertados() {
        return disparosAcertados;
    }

    public static int getDisparosRealizados() {
        return disparosRealizados;
    }

    public static int getBombas() {
        return bombasDisponibles;
    }

    public static int getNavesDestruidas1Total() {
        return navesDestruidas1Total;
    }

    public static int getNavesDestruidas2Total() {
        return navesDestruidas2Total;
    }

    public static int getNavesDestruidas3Total() {
        return navesDestruidas3Total;
    }

    public static int getNavesDestruidas4Total() {
        return navesDestruidas4Total;
    }

    public static int getNavesDestruidas5Total() {
        return navesDestruidas5Total;
    }

    public static int getNavesDestruidas6Total() {
        return navesDestruidas6Total;
    }

    public static int getNavesDestruidasTotal() {
        return navesDestruidasTotal;
    }

    public static void setDadesPerfil(ArchivoConfiguracion dadesPerfil) {
        ManagerPerfil.dadesPerfil = dadesPerfil;
    }

    public static void setIdioma(int idioma) {
        ManagerPerfil.idioma = idioma;
    }

    public static void setLevel(int level) {
        ManagerPerfil.level = level;
    }

    public static void setMuertes(int muertes) {
        ManagerPerfil.muertes = muertes;
    }

    public static void setNave(int nave) {
        ManagerPerfil.nave = nave;
    }

    public static void setNavesDestruidas(int navesDestruidas) {
        ManagerPerfil.navesDestruidas = navesDestruidas;
    }

    public static void setNavesDestruidas1(int navesDestruidas1) {
        ManagerPerfil.navesDestruidas1 = navesDestruidas1;
    }

    public static void setNavesDestruidas2(int navesDestruidas2) {
        ManagerPerfil.navesDestruidas2 = navesDestruidas2;
    }

    public static void setNavesDestruidas3(int navesDestruidas3) {
        ManagerPerfil.navesDestruidas3 = navesDestruidas3;
    }

    public static void setNavesDestruidas4(int navesDestruidas4) {
        ManagerPerfil.navesDestruidas4 = navesDestruidas4;
    }

    public static void setNavesDestruidas5(int navesDestruidas5) {
        ManagerPerfil.navesDestruidas5 = navesDestruidas5;
    }

    public static void setNavesDestruidas6(int navesDestruidas6) {
        ManagerPerfil.navesDestruidas6 = navesDestruidas6;
    }

    public static void setNivel(int nivel) {
        ManagerPerfil.nivel = nivel;
    }

    public static void setNivelActual(int nivelActual) {
        ManagerPerfil.nivelActual = nivelActual;
    }

    public static void setPerfilTriat(int perfilTriat) {
        ManagerPerfil.perfilTriat = perfilTriat;
    }

    public static void setPuntuacio(int puntuacio) {
        ManagerPerfil.puntuacio = puntuacio;
    }

    public static void setVidas(int vidas) {
        ManagerPerfil.vidas = vidas;
    }

    public static void setVolumEfectes(int volumEfectes) {
        ManagerPerfil.volumEfectes = volumEfectes;
    }

    public static void setVolumMusica(int volumMusica) {
        ManagerPerfil.volumMusica = volumMusica;
    }

    public static void setDisparosAcertados(int disparosAcertados) {
        ManagerPerfil.disparosAcertados = disparosAcertados;
    }

    public static void setDisparosRealizados(int disparosRI) {
        ManagerPerfil.disparosRealizados = disparosRI;
    }

    public static void setBombasDisponibles(int bombas) {
        ManagerPerfil.bombasDisponibles = bombas;
    }

    public static void setNavesDestruidas1Total(int navesDestruidas1Total) {
        ManagerPerfil.navesDestruidas1Total = navesDestruidas1Total;
    }

    public static void setNavesDestruidas2Total(int navesDestruidas2Total) {
        ManagerPerfil.navesDestruidas2Total = navesDestruidas2Total;
    }

    public static void setNavesDestruidas3Total(int navesDestruidas3Total) {
        ManagerPerfil.navesDestruidas3Total = navesDestruidas3Total;
    }

    public static void setNavesDestruidas4Total(int navesDestruidas4Total) {
        ManagerPerfil.navesDestruidas4Total = navesDestruidas4Total;
    }

    public static void setNavesDestruidas5Total(int navesDestruidas5Total) {
        ManagerPerfil.navesDestruidas5Total = navesDestruidas5Total;
    }

    public static void setNavesDestruidas6Total(int navesDestruidas6Total) {
        ManagerPerfil.navesDestruidas6Total = navesDestruidas6Total;
    }

    public static void setNavesDestruidasTotal(int navesDestruidasTotal) {
        ManagerPerfil.navesDestruidasTotal = navesDestruidasTotal;
    }



    

    public static ArchivoConfiguracion getArxiuConfiguracio() {
        return dadesPerfil;
    }
}
